.NET Core 3.0 SDK Docker ImageにPowerShell Coreが含まれました
しばたです。
つい先日.NET Core 3.0 Preview 4がリリースされましたが、このSDKを含むDockerコンテナイメージ(mcr.microsoft.com/dotnet/core/sdk:3.0)にPowerShell Coreが含まれることになりました。
こちら中の人のツイート。
そして該当のGitHub Issueです。
含まれるPowerShellのバージョンについて
現在のところコンテナにはPowerShell Core 6.2(.NET Core 2.1製)が含まれています。
PowerShellのバージョンは随時更新されていくものと思われます。
また、SDKを含まない.NET Core/.NET Core RuntimeのDockerイメージにはPowerShell Coreは含まれません。
開発ツールとしてSDKにPowerShell Coreを付帯させる形となっており、イメージサイズを気にする人にとっても安心の内容となっています。
何が嬉しいのか?
これによりdocker run
などのコマンドでPowerShell Coreが容易に使える様になるのと、.NET Coreアプリケーション開発においてPowerShellでビルドタスクなどを書いていた場合は既存のスクリプトを割と容易にコンテナ化、クロスプラットフォーム化できるのではないかと思います。
以下にGitHubのIssueにあった簡単なPowerShell実行例を記載しておきます。
# GitHubのIssueにあった簡単なPowerShell実行例
docker run --rm mcr.microsoft.com/dotnet/core/sdk:3.0 pwsh -c Write-Host "Hello Powershell"
.NET Core Global Toolsを使ったPowerShell Coreのインストール
ここで、このイメージのDockerfileを見てみるとPowerShell Coreのインストール方法がちょっと変わていることに気が付きます。
# 上記Dockerfileより一部引用
# Install PowerShell global tool
ENV POWERSHELL_VERSION 6.2.0
RUN wget -O PowerShell.Linux.Alpine.$POWERSHELL_VERSION.nupkg https://pwshtool.blob.core.windows.net/tool/$POWERSHELL_VERSION/PowerShell.Linux.Alpine.$POWERSHELL_VERSION.nupkg \
&& powershell_sha512='56c823a266c81d71d10dad4dc3a6967486ba54ad3165205bdf573da7d036b0f8205a2573917599e4593ca2a3309a1298ecd6f45cefd6aa678f00405c55c9c6bc' \
&& echo "$powershell_sha512 PowerShell.Linux.Alpine.$POWERSHELL_VERSION.nupkg" | sha512sum -c - \
&& mkdir -p /usr/share/powershell \
&& dotnet tool install --add-source / --tool-path /usr/share/powershell --version $POWERSHELL_VERSION PowerShell.Linux.Alpine \
&& rm PowerShell.Linux.Alpine.$POWERSHELL_VERSION.nupkg \
&& ln -s /usr/share/powershell/pwsh /usr/bin/pwsh \
# To reduce image size, remove the copy nupkg that nuget keeps.
&& find /usr/share/powershell -print | grep -i '.*[.]nupkg$' | xargs rm \
# Add ncurses-terminfo-base to resolve psreadline dependency
&& apk add --no-cache ncurses-terminfo-base
一連のコマンドの途中で、
dotnet tool install --add-source / --tool-path /usr/share/powershell --version $POWERSHELL_VERSION PowerShell.Linux.Alpine
とある様にここではPowerShell CoreをNugetパッケージ(.nupkg
)からdotnet
コマンドを使いインストールしています。
これは、PowerShell Core 6.1のリリース時にアナウンスされていた.NET Core Global Toolsサポート実装の様です。
詳細は私の個人ブログをご覧ください。
また、PowerShellのこちらのIssueによると
@AceHack Nice observation, but not 100% correct. It is installing that nupkg as a dotnet tool, but "soon", you should just be able to do: dotnet tool install powershell without pre-downloading the nupkg.
とあり、将来的にはNugetパッケージの事前ダウンロードは不要となり、単純にdotnet
コマンド一発でPowerShellのインストールが可能になる見込みだそうです。
最後に
ざっとこんな感じです。
単純なアナウンスの中に.NET Core Global Toolsサポートがこっそり紛れ込んでいておりPowerShellおじさんとしては油断ならない内容でした。
PowerShellはもともとシステム管理者向けに生まれたツールですが、これをきっかけとして.NETな開発者のみなさんにも広く使ってもらえる様になると嬉しいですね。